// This file is part of OpenTSDB.
// Copyright (C) 2017 TeleDB Development Group.
//
// This program is free software: you can redistribute it and/or modify it
// under the terms of the GNU Lesser General Public License as published by
// the Free Software Foundation, either version 2.1 of the License, or (at your
// option) any later version.  This program is distributed in the hope that it
// will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty
// of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser
// General Public License for more details.  You should have received a copy
// of the GNU Lesser General Public License along with this program.  If not,
// see <http://www.gnu.org/licenses/>.
package net.opentsdb.tsd.rpcs;

import net.opentsdb.core.TSDB;
import net.opentsdb.tsd.HttpQuery;
import net.opentsdb.tsd.HttpRpc;
import net.opentsdb.tsd.service.*;
import org.jboss.netty.handler.codec.http.HttpResponseStatus;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.io.IOException;
import java.util.Locale;

public class ManagerRpc implements HttpRpc {

    private static final Logger LOG = LoggerFactory.getLogger(ManagerRpc.class);

    @Override
    public void execute(TSDB tsdb, HttpQuery query) throws IOException {

        final String[] uri = query.explodeAPIPath();
        final String endpoint = uri.length > 1 ? uri[1].toLowerCase(Locale.ENGLISH) : "";

        RpcService service;

        if(endpoint.equals("correct")){
            service = new CorrectCountService(tsdb, query);
        }else if(endpoint.equals("tsuid")){
            service = new DeleteHbaseTsuidService(tsdb,query);
        }else if(endpoint.equals("cleartagk")){
            service = new RemoveTagsService(tsdb,query);
        } else if(endpoint.equals("removetsuids")){
            service = new RemoveHbaseTsuidsService(tsdb,query);
        }else {
            query.sendReply(HttpResponseStatus.BAD_REQUEST, new StringBuilder("Illegal request "+endpoint));
            return;
        }

        service.handle();

    }
}
